package ar.uade.distribuidas.tpo.dba.dominio;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import ar.uade.distribuidas.tpo.base.dominiodto.EstadoItemPedido;
import ar.uade.distribuidas.tpo.base.dominiodto.ItemPedidoDTO;

@Entity
@Table(name = "itemsPedido")
public class ItemPedido {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	private Long cotizacionId;
	private Long itemCotizacionId;
	private int cantidad;
	private Long ordenDePedidoId;
	private long rodamientoId;
	
	@Enumerated(EnumType.STRING)
	private EstadoItemPedido estado;
	
	public long getRodamientoId() {
		return rodamientoId;
	}

	public void setRodamientoId(long rodamientoId) {
		this.rodamientoId = rodamientoId;
	}

	public Long getOrdenDePedidoId() {
		return ordenDePedidoId;
	}

	public void setOrdenDePedidoId(Long ordenDePedidoId) {
		this.ordenDePedidoId = ordenDePedidoId;
	}
	

	@Override
	public String toString() {
		return "ItemPedido [id=" + id + ", cotizacionId=" + cotizacionId + ", itemCotizacionId=" + itemCotizacionId
				+ ", cantidad=" + cantidad + ", ordenDePedidoId=" + ordenDePedidoId + ", rodamientoId=" + rodamientoId
				+ ", estado=" + estado + "]";
	}

	public int getCantidad() {
		return cantidad;
	}

	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}

	public Long getCotizacionId() {
		return cotizacionId;
	}


	public void setCotizacionId(Long cotizacionId) {
		this.cotizacionId = cotizacionId;
	}


	public Long getItemCotizacionId() {
		return itemCotizacionId;
	}


	public void setItemCotizacionId(Long itemCotizacionId) {
		this.itemCotizacionId = itemCotizacionId;
	}


	public ItemPedido() {
		super();
		this.id = System.currentTimeMillis();
		this.estado = EstadoItemPedido.PENDIENTE;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public EstadoItemPedido getEstado() {
		return estado;
	}

	public void setEstado(EstadoItemPedido estado) {
		this.estado = estado;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + cantidad;
		result = prime * result
				+ ((cotizacionId == null) ? 0 : cotizacionId.hashCode());
		result = prime * result + ((estado == null) ? 0 : estado.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime
				* result
				+ ((itemCotizacionId == null) ? 0 : itemCotizacionId.hashCode());
		result = prime * result
				+ ((ordenDePedidoId == null) ? 0 : ordenDePedidoId.hashCode());
		result = prime * result + (int) (rodamientoId ^ (rodamientoId >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		ItemPedido other = (ItemPedido) obj;
		if (cantidad != other.cantidad)
			return false;
		if (cotizacionId == null) {
			if (other.cotizacionId != null)
				return false;
		} else if (!cotizacionId.equals(other.cotizacionId))
			return false;
		if (estado != other.estado)
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (itemCotizacionId == null) {
			if (other.itemCotizacionId != null)
				return false;
		} else if (!itemCotizacionId.equals(other.itemCotizacionId))
			return false;
		if (ordenDePedidoId == null) {
			if (other.ordenDePedidoId != null)
				return false;
		} else if (!ordenDePedidoId.equals(other.ordenDePedidoId))
			return false;
		if (rodamientoId != other.rodamientoId)
			return false;
		return true;
	}

	public ItemPedidoDTO toDTO() {
		ItemPedidoDTO dto = new ItemPedidoDTO();
		dto.setCotizacionId(cotizacionId);
		dto.setItemCotizacionId(itemCotizacionId);
		dto.setId(id);
		dto.setEstado(estado);
		dto.setCantidad(cantidad);
		dto.setOrdenDePedidoId(ordenDePedidoId);
		dto.setRodamientoId(rodamientoId);
		return dto;
	}

	public static ItemPedido fromDTO(ItemPedidoDTO dto) {
		ItemPedido i = new ItemPedido();
		
		i.setCotizacionId(dto.getCotizacionId());
		i.setEstado(dto.getEstado());
		i.setId(dto.getId());
		i.setItemCotizacionId(dto.getItemCotizacionId());
		i.setCantidad(dto.getCantidad());
		i.setOrdenDePedidoId(dto.getOrdenDePedidoId());
		i.setRodamientoId(dto.getRodamientoId());
		
		return i;
	}

}
